/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Grupo;
import org.json.JSONObject;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;

/**
 *
 * @author Josmary Carrero
 */
public class Grupo_DAO {

    public static JSONObject listaGrupos(Grupo g, String limit, String offset, String order, String asc) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject grupos = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando un Personal!");
            return null;
        }

        String query = "SELECT * FROM grupo ";
        String param = "where (1=1) ";
        if (g.getIdGrupo() != null && !g.getIdGrupo().equals("")) {
            param += "and upper(id_grupo) like '%" + g.getIdGrupo().toUpperCase() + "%'";
        }
        if (g.getTipoGrupo() != null && !g.getTipoGrupo().equals("")) {
            param += "and upper(tipo_grupo) like '%" + g.getTipoGrupo().toUpperCase() + "%'";
        }
        if (g.getSede() != null && !g.getSede().equals("")) {
            param += "and sede = '" + g.getSede() + "'";
        }

        String format = " ";
        if (order != null && !order.equals("")) {
            format += " order by " + order;
            if (asc != null && !asc.equals("") && asc.equals("false")) {
                format += " desc";
            } else {
                format += " asc";
            }
        } else format += " order by sede, id_grupo asc";

        if (limit != null && !limit.equals("")) {
            format += " limit " + limit;
        }
        if (offset != null && !offset.equals("")) {
            format += " offset " + offset;
        }

        System.out.println(query + param + format);
        JSONArray listado = new JSONArray();
        try {
            rs = s.executeQuery(query + param + format);
            int i = 0;
            while (rs.next()) {
                JSONObject grupo = new JSONObject();
                grupo.put("id_grupo", rs.getString(1));
                grupo.put("tipo_grupo", rs.getString(2));
                grupo.put("sede", rs.getString(3));
                listado.put(i++, grupo);
            }
            grupos.put("Grupos", listado);

            query = "SELECT count(*) FROM grupo ";
            rs = s.executeQuery(query + param);
            if (rs.next()) {
                grupos.put("tam", rs.getString(1));
            }

        } catch (SQLException se) {
            System.out.println("Error al listar drop  de grupos"+se.getMessage());
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
        return grupos;
    }

    public Grupo_DAO() {
    }

    public boolean insertarGrupo(Grupo g) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Insertando Grupo!");
            return false;
        }
        String query = "INSERT INTO grupo(id_grupo,tipo_grupo,sede)"
                + "VALUES ('" + g.getIdGrupo() + "','" + g.getTipoGrupo() + "','" + g.getSede() + "')";
        System.out.println(query);
        System.out.println("\n\tQuery: " + query + "\n");

        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            System.out.println("Error Insertando Grupo!" + se.getMessage());
            return false;
        }
    }

    public boolean comprobarGrupo(Grupo rsg) throws SQLException {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean existe = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Comprobando la Existencia de Grupos!");
        }

        String query = "Select * from grupo where id_grupo = '" + rsg.getIdGrupo() + "'and sede='" + rsg.getSede() + "' ;";
        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                System.out.print(rs.getString(1));
                existe = true;
            }
        } catch (SQLException se) {
            System.out.println("Error Consultando Grupos DAO!");
        }
        return existe;
    }

    public static boolean comprobarGrupo2(String rsg, String sed) throws SQLException {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean existe = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Comprobando la Existencia de Grupos!");
        }

        String query = "SELECT * FROM grupo WHERE id_grupo = '" + rsg + "' AND sede='" + sed + "' ;";
        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                System.out.print(rs.getString(1));
                existe = true;
            }
        } catch (SQLException se) {
            System.out.println("Error Consultando Grupos DAO!");
        }
        return existe;
    }

    public static boolean elimGrupo(String rsg, String sed) throws SQLException {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean elimina = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Comprobando la Existencia de Grupos!");
        }

        String query = "DELETE FROM pertenece_grupo WHERE id_grupo = '" + rsg + "';";
        System.out.println(query);
        try {
            query = "DELETE FROM grupo WHERE id_grupo = '" + rsg + "' AND sede='" + sed + "' ;";
            System.out.println(query);
            s.executeUpdate(query);
            elimina = true;
        } catch (SQLException se) {
            System.out.println("Error eliminando Grupos DAO! " + se.getMessage());
        }
        return elimina;
    }

    public static List<Grupo> consultarTodosGrupos() {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;

        String query = "Select id_grupo, sede, tipo_grupo from grupo;";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Todos Grupos! " + se.getMessage());
            return null;
        }

        try {
            rs = s.executeQuery(query);

            List<Grupo> objetos = new ArrayList();
            try {
                int i = 0;
                while (rs.next()) {
                    Grupo obj = new Grupo(rs.getString(1), rs.getString(2), rs.getString(3));
                    objetos.add(obj);
                    System.out.println(rs.getString(1) + rs.getString(2) + rs.getString(3));

                }
            } catch (Exception e) {
            }
            return objetos;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultando Todos Grupos " + se.getMessage());
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public static List<Grupo> consultarGrupoSede(String sed) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;

        String query = "SELECT id_grupo,tipo_grupo, sede FROM grupo WHERE sede = '" + sed + "';";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Grupos por Sedes! " + se.getMessage());
            return null;
        }

        try {
            rs = s.executeQuery(query);

            List<Grupo> objetos = new ArrayList();
            try {
                int i = 0;
                while (rs.next()) {
                    Grupo obj = new Grupo(rs.getString(1), rs.getString(2), rs.getString(3));
                    objetos.add(obj);
                    System.out.println(rs.getString(1) + rs.getString(2) + rs.getString(3));

                }
            } catch (Exception e) {
            }
            return objetos;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultando Grupos por Sede " + se.getMessage());
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public static boolean grupoEnUso(String rsg, String sed) throws SQLException {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean en_uso = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Comprobando la Existencia de Grupos en uso!");
        }

        String query = "select * "
                + "from grupo g, guardia a,pertenece_grupo p "
                + "where g.id_grupo= a.id_grupo "
                + "and g.id_grupo= '" + rsg + "'"
                + "and g.sede= '" + sed + "';";

        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                en_uso = true;
                System.out.println("FFFFFFFFFVJCWIVW");
            }
        } catch (SQLException se) {
            System.out.println("Error Consultando Grupos DAO en uso!");
        }
        return en_uso;
    }
}
